package com.jzx.dao;

import com.jzx.bean.User;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author JunedQQ
 * @create 2019/6/24
 * @since 1.0.0
 */
@Repository
public interface UserDao {

    /**
     * 根据用户id来获取用户信息
     * @param id    用户id
     * @return
     */
    @Select("select * from user where id = #{id}")
    User findUserById(String id);

    /**
     * 获取所有用户
     * @return
     */
    @Select("select * from user")
    List<User> findAllUser();

    /**
     * 获取用户的数量
     * @return
     */
    @Select("select count(*) from user")
    int getUserTotal();

    /**
     * 根据用户电话号码来获取用户信息
     * @param tel   电话号码
     * @return
     */
    @Select("select * from user where tel = #{tel}")
    User findUserByTel(String tel);


    /**
     * 根据用户电话号码来获取用户密码
     * @param tel   电话号码
     * @return
     */
    @Select("select password from user where tel = #{tel}")
    String getUserPasswordByTel(String tel);

    /**
     * 根据用户id来获取用户密码
     * @param id    用户id
     * @return
     */
    @Select("select password from user where id = #{id}")
    String getUserPasswordById(String id);

    /**
     * 根据用户的电话号码来获取用户的头像地址
     * @param tel   用户电话号码
     * @return
     */
    @Select("select photo from user where tel = #{tel}")
    String getUserPhotoByTel(String tel);

    /**
     * 根据用户id来获取用户头像的地址
     * @param id    用户id
     * @return
     */
    @Select("select photo from user where id = #{id}")
    String getUserPhotoById(String id);

    /**
     * 根据用户电话号码来获取用户id
     * @param tel 电话号码
     * @return
     */
    @Select("select id from user where tel = #{tel}")
    int getUserIdByTel(String tel);

    /**
     * 根据用户id来获取用户电话号码
     * @param id 用户id
     * @return
     */
    @Select("select tel from user where id = #{id}")
    String getUserTelById(int id);


    /**
     * 根据用户id修改用户密码
     * @param id    用户id
     * @param newPassword 新的密码
     * @return
     */
    @Update("update user set password = #{newPassword} where id = #{id}")
    int updateUserPasswordById(@Param("id") int id,@Param("newPassword") String newPassword);


    /**
     * 根据用户电话号码修改用户密码
     * @param tel   用户电话号码
     * @param newPassword 新的密码
     * @return
     */
    @Update("update user set password = #{newPassword} where tel = #{tel}")
    int updateUserPasswordByTel(@Param("tel") String tel,@Param("newPassword") String newPassword);

    /**
     * 根据用户电话号码更换用户头像地址
     * @param tel   电话号码
     * @param photo     新的photo地址
     * @return
     */
    @Update("update user set photo = #{photo} where tel = #{tel}")
    int updateUserPhotoByTel(@Param("tel") String tel,@Param("photo") String photo);

    /**
     * 根据用户id更改用户头像地址
     * @param id   用户id
     * @param photo     用户新的photo地址
     * @return
     */
    @Update("update user set photo = #{photo} where id = #{id}")
    int updateUserPhotoById(@Param("id") int id,@Param("photo") String photo);

    /**
     * 添加用户，
     * @param user  用户信息实体类
     * @return
     */
    @Insert("insert into user(tel,password,photo) values(#{tel},#{password},#{photo})")
    int addUser(User user);


}